package com.yeban.javase.day20.reflect.singleton;

/**
 * @Desc 线程安全的单例模式  DCL
 * @Author yeban
 * @Date 2025/11/4
 *
 * 反射获取私有的构造方法，进行实例创建，与当前getInstance()获取的实例不是同一个
 */
public class SingletonDemo3 {

    // 私有的静态的实例
    private static SingletonDemo3 instance;

    // 标记
    private static boolean adas = false;

    // 私有的构造方法
    private SingletonDemo3() {
        synchronized (SingletonDemo2.class) {
            if(!adas) {
                adas = true;
            } else {
                throw new IllegalArgumentException("禁止操作此构造器，已有实例存在！");
            }
        }
    }

    // 公开的 静态的 获取本来实例的方法
    public static SingletonDemo3 getInstance() {
        // Double Check Lock
        if(instance == null) {
            synchronized (SingletonDemo3.class) {
                if (instance == null) {
                    instance = new SingletonDemo3();
                }
            }
        }
        return instance;
    }
}